解题思路:
第一处: 存放字符串初始位置也是从0开始存放的,由于k是控制c字符串的位置值,所以k值应为0。
第二处: 判断两个字符串中是否有字符串结束符产生,所以应改为:while( *p || *q ),
而不是两字符串中对应位置的值不相等。
***************************************************
假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:除了字符串前导的*号之外,将串中其它*号全部删除。在编写函数时,不得使用C语言提供
的字符串函数。函数fun中给出的语句仅供参考。
例如,字符串中的内容为:****A*BC*DEF*G*******,删除后, 字符串中的内容应当是:****ABCDEFG。
注意: 部分源程序在文件PROG1.C文件中。
请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
给定源程序:
#include
void fun( char *a )
{
int i=0,k;
while(a[i]==’*’) i++;
k=i+1;
while(a[i]!=’\0’) /* 以下程序段实现非*字符前移 */
{
}
a[i+1]=’\0’;
}
main()
{ char s[81];
printf("Enter a string:\n");gets(s);
fun( s );
printf("The string after deleted:\n");puts(s);
NONO();
}
解题思路:
本题是考察字符串的操作。
1. 使用while循环语句求出字符串前导*号的个数。
2. 使用while循环语句判断a[i]是否是字符串结束符标志,如果不是字符串结束标志,则再判断是否是字符*号,如果不是*号,则把a[i]字符存入a[k]中,如果是*号则跳过该*号,直至字符串结束为止。
参考答案:
void fun( char *a )
{
int i=0,k;
while(a[i]==’*’) i++;
k=i;
while(a[i]!=’\0’) /* 以下程序段实现非*字符前移 */
{
if(a[i] != ’*’) a[k++]=a[i];
i++;
}
a[k]=’\0’;
}